package com.roger.homecenterscreen.voice

import android.content.Context
import android.os.Build
import android.util.Log
import java.io.File

/**
 * 语音功能存储助手
 * 处理Android 11+ Scoped Storage适配
 */
object VoiceStorageHelper {
    
    private const val TAG = "VoiceStorageHelper"
    
    /**
     * 获取语音缓存目录
     * Android 11+ 使用应用私有目录，不需要存储权限
     */
    fun getVoiceCacheDir(context: Context): File {
        return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            // Android 11+ 使用应用私有缓存目录
            File(context.cacheDir, "voice").also { dir ->
                if (!dir.exists()) {
                    dir.mkdirs()
                    Log.i(TAG, "创建语音缓存目录: ${dir.absolutePath}")
                }
            }
        } else {
            // Android 10及以下使用外部存储
            File(context.getExternalFilesDir(null), "voice").also { dir ->
                if (!dir.exists()) {
                    dir.mkdirs()
                    Log.i(TAG, "创建语音外部存储目录: ${dir.absolutePath}")
                }
            }
        }
    }
    
    /**
     * 获取语音模型目录
     */
    fun getVoiceModelDir(context: Context): File {
        return File(getVoiceCacheDir(context), "models").also { dir ->
            if (!dir.exists()) {
                dir.mkdirs()
                Log.i(TAG, "创建语音模型目录: ${dir.absolutePath}")
            }
        }
    }
    
    /**
     * 获取语音录音临时目录
     */
    fun getVoiceRecordDir(context: Context): File {
        return File(getVoiceCacheDir(context), "records").also { dir ->
            if (!dir.exists()) {
                dir.mkdirs()
                Log.i(TAG, "创建语音录音目录: ${dir.absolutePath}")
            }
        }
    }
    
    /**
     * 清理过期的语音缓存文件
     */
    fun cleanupVoiceCache(context: Context, maxAgeMillis: Long = 24 * 60 * 60 * 1000) {
        try {
            val voiceDir = getVoiceCacheDir(context)
            val currentTime = System.currentTimeMillis()
            
            voiceDir.listFiles()?.forEach { file ->
                if (file.isFile() && (currentTime - file.lastModified()) > maxAgeMillis) {
                    if (file.delete()) {
                        Log.d(TAG, "清理过期语音文件: ${file.name}")
                    }
                }
            }
        } catch (e: Exception) {
            Log.e(TAG, "清理语音缓存失败", e)
        }
    }
    
    /**
     * 检查存储空间是否足够
     */
    fun checkStorageSpace(context: Context, requiredBytes: Long = 100 * 1024 * 1024): Boolean {
        return try {
            val voiceDir = getVoiceCacheDir(context)
            val availableBytes = voiceDir.freeSpace
            val hasEnoughSpace = availableBytes >= requiredBytes
            
            Log.i(TAG, "存储空间检查: 可用=${availableBytes / 1024 / 1024}MB, 需要=${requiredBytes / 1024 / 1024}MB, 足够=$hasEnoughSpace")
            hasEnoughSpace
        } catch (e: Exception) {
            Log.e(TAG, "检查存储空间失败", e)
            false
        }
    }
}